除了使用反射访问匿名内部类的成员之外,还有什么办法吗? 最佳答案 匿名内部类有类型但没有名称。您可以访问未由指定父类(superclass)型定义的字段。然而,一旦分配给命名类型变量,接口(interface)就会丢失。显然,您可以从内部类本身访问这些字段。添加代码的一种方法是通过实例初始化程序:finalAtomicIntegery=newAtomicInteger();newRunnable(){intx;{x=5;doRun(this);y.set(x);}publicvoidrun(){...blah...}};匿名内部类表
假设我有一个我创建的对象。我在其中编辑了一些值,因此它与我引用的新对象()不同。让我们称该对象为f1。现在我希望另一个名为f2的对象是f1的副本而不是指针,这样当我更改f2中的值时,它不会同时更改f1。我将如何在Java中执行此操作? 最佳答案 首先,让你的类(class)实现Cloneable界面。没有这个,调用clone()在你的对象上会抛出异常。接下来,覆盖Object.clone()所以它返回你的特定类型的对象。实现可以简单地是:@OverridepublicMyObjectclone(){return(MyObject)s
我有一个关于在我的域对象中生成的getter和setter方法的小问题。我想为我的源代码使用一个通用的风格指南。该风格指南的一部分说我在每个类成员名称的开头都使用前缀“m”表示成员。classUser{StringmName;ListmAllCall;ListmAllGeo;不幸的是,我有几个具有更多成员变量的类。我遇到的问题是我是一个非常懒惰的开发人员,我在Eclipse中使用创建了getter和setter方法"Source"->"GenerateGettersandSetters".结果是publicStringgetmName(){returnmName;}publicvoid
这个程序publicclassHelloWorld{publicvoidtestFunc(){System.out.println("Class="+this);}publicstaticvoidmain(String[]args){HelloWorldhw=newHelloWorld();System.out.println("Hello,World");hw.testFunc();}}给我这个输出:Hello,WorldClass=HelloWorld@7c6768第二行HelloWorld后面的@7c6768是什么意思? 最佳答案
即使尝试为此想出一个干净的标题也是一个挑战。基本思想是定义两个父类(superclass):一个用于“子”项目,其成员引用其“父”,另一个用于包含子对象的“父”列表。从child->parent和parent->child的链接是对称的。每个父/子父类(superclass)都有定义和实现附加功能的子类。总有一个并行子类使得child与parent配对.即parent将只包含child引用资料,以及child只会引用parent-子类型之间没有“交叉”。我该如何表示呢?几天来我一直坚持这个问题,我对多级嵌套泛型类型的创意越多,它就越糟糕。这就是我想要做的:abstractclassCh
在ArrayBlockingQueue中,所有需要锁的方法在调用lock()之前将其复制到本地final变量。publicbooleanoffer(Ee){if(e==null)thrownewNullPointerException();finalReentrantLocklock=this.lock;lock.lock();try{if(count==items.length)returnfalse;else{insert(e);returntrue;}}finally{lock.unlock();}}当字段this.lock为finalthis.lock复制到局部变量lock/?
我有一个类(Base)和一个InfoBase类型的字段,其中包含一些信息。一种Base的特化(Ext)需要保存附加信息(InfoExt)。因此Ext将一个InfoExt分配给Base.info。但是我遇到了问题Base替换了info,因为它将分配info=newInfoBase()因此InfoExt的附加信息丢失。因此我在Base(变体A)中创建了一个abstractvoidassign()。在这个每次在Ext中使用时,都需要将案例信息转换为InfoExt。因此,在变体B中,我另外创建了abstractInfoBaseinfo()。variantAvariantB+----------
我有一个以枚举成员作为参数的参数化测试类。publicenumMyEnum{A,B}这是测试类的重要部分:@ParameterizedRobolectricTestRunner.ParameterspublicstaticCollectiondata(){returnArrays.asList(newObject[][]{{MyEnum.A}});}publicMyTestClass(MyEnumvalue){}运行测试时,我得到这个异常:java.lang.IllegalArgumentException:argumenttypemismatch如果我将构造函数更改为publicMy
关于在Java中访问protected成员的问题已经被问过并回答过很多次,例如:Java:protectedaccessacrosspackages但是我不明白为什么要这样实现,参见《JavaProgrammingLanguage》(第4版)的解释:“限制背后的原因是:每个子类继承父类(superclass)的契约并以某种方式扩展该契约。假设一个子类作为其扩展契约的一部分,对父类(superclass)的protected成员的值施加约束父类(superclass)。如果不同的子类可以访问第一个子类对象的protected成员,那么它可以以破坏第一个子类契约的方式操纵它们,这是不允许的
这是一个演示我面临的问题的例子:ScriptEngineengine=newNashornScriptEngineFactory().getScriptEngine(newString[]{"-strict"});try{engine.eval("functionFoo(src){this.src=src};vare={x:newFoo(\"what\")};");ScriptContextc=newSimpleScriptContext();c.setBindings(engine.createBindings(),ScriptContext.ENGINE_SCOPE);c.getB